为什么js推荐使用单引号
单引号和多引号区别,没啥区别,单引号编译速度更快,而且单引号内可以使用双引号,有时候内部是json 格式必须用双引号
中文解释
模块
创建模块post 放在 modules/post 下 ng generate module modules/post
componet 是生成的html 和css,ts 文件
模块导入
需要导出的模块在module 的 exports中添加,exports: [PostComponent],
引用的模块导入:imports: [PostModule],
数据绑定
在component.ts 内声明
.html 使用{{值}}
*ngFor
*ngfor 会自动扩展成 <ng-template ngfor>
*是一种语法糖,缩写形式
<li *ngFor="let entity of entities">
<h4>{{ entity.title }}</h4>
</li>
*ngIf
<p *ngIf="entity.body">{{ entity.body }}</p>
属性绑定
<a title="{{ entity.title }}" >{{ entity.title }}</a>
<a [title]="entity.title">{{ entity.title }}</a>
第二种形式可以绑定标签不存在的属性值 如 text-content, Angular 官方文档在绑定属性几乎都是使用[],而插值表达式{{}}更多是用于显示,两者最大的区别就是后者会将{{}}语句里执行完的值再转换string 类型。
事件绑定
<button (click)="removeItem(i)">Remove</button>
参数直接填就行
双向绑定
Module
import { FormsModule } from '@angular/forms'; // <-- NgModel lives here
app.module.ts (@NgModule imports)
content_copy
imports: [
BrowserModule,
FormsModule
],
<input [(ngModel)]="hero.name" placeholder="name"/>
[(ngModel)] 是 Angular 的双向数据绑定语法。
这里把 hero.name 属性绑定到了 HTML 的 textbox 元素上,以便数据流可以双向流动:从 hero.name 属性流动到 textbox,并且从 textbox 流回到 hero.name 。
父子组件
父传子
传递数据, 父组件ul, 数据为entities在父组件内, 必须在子部件属性内赋值, 子部件使用@Input,, //@Input 此命令用来修饰属性是用来接收父组件传递的值 参考
有兴趣了解下单向数据流 angular 更新view,是在model更新阶段进行,不是model生成view阶段。
<ul>
<app-post-item *ngFor = "let entity of entities" [entity] = entity>
</app-post-item>
</ul>
子传父(function)
This example features an <input>
where a user can enter a value and click a <button>
that raises an event. The EventEmitter then relays the data to the parent component.
子部件
@Output() newItemEvent = new EventEmitter<string>();
addNewItem(value: string) {
this.newItemEvent.emit(value);
}
<button (click)="addNewItem(newItem.value)">Add to parent's list</button>
父部件
<app-item-output (newItemEvent)="addItem($event)"></app-item-output>
The event binding, (newItemEvent)='addItem($event)', tells Angular to connect the event in the child, newItemEvent, to the method in the parent, addItem(),
路由
basics
app-routing.module.ts
const routes: Routes = [{ path: 'posts', component: PostComponent }];
router link
<a
[routerLink]="['/posts', entity.id]"
[title]="entity.title"
[textContent]="entity.title"
></a>
import from app-routing module
paramMap
constructor(private route: ActivatedRoute) {}
ngOnInit(): void {
this.route.paramMap.subscribe((params) => {
const postId = +params.get('id');
console.log(postId);
});
Model 标记可选属性使用问号 body?
服务
@Injectable({
providedIn: 'root'
})
root表示在任何位置可以使用
注入
componet.ts
constructor(private postService: PostService) {
this.entities = posts;
}
表单
pre 元素可定义预格式化的文本。被包围在 pre 元素中的文本通常会保留空格和换行符。而文本也会呈现为等宽字体。
演示:
这是一个pre标签 哈 哈
formBuilder
registerForm = this.formBuilder.group({
username: ['', Validators.required],
password: ['', [Validators.required, Validators.minLength(6)]],
});